package com.example.design.c.state.demo1;

/**
 * 按照个人理解用枚举实现一下
 * 但后来想想觉得也不太好
 * 这样写的话应该又回到高耦合的方式了
 *
 * @author zhaojk
 */
public enum StateEnum implements State {
    A,
    B;

    /**
     * 状态模式对开闭原则的支持并不太好
     * 对于可以切换状态的状态模式
     * 增加新的状态类需要修改那些负责状态转换的源码
     * 否则无法切换到新增状态
     * 而且修改某个状态类的行为也需要修改对应类的源码
     *
     * @param context
     */
    @Override
    public void handle(Context context) {
        if (context == null) {
            return;
        }

        StateEnum stateEnum = (StateEnum) context.getState();

        switch (stateEnum) {
            case A:
                System.out.println("当前状态是A");
                context.setState(B);
                break;
            case B:
                System.out.println("当前状态是B");
                context.setState(A);
                break;
            default:
        }

    }
}
